package com.neusoft.service.impl;

import com.neusoft.common.Result;
import com.neusoft.dao.RoleDao;
import com.neusoft.dao.RoleMenuDao;
import com.neusoft.pojo.Role;
import com.neusoft.pojo.RoleMenu;
import com.neusoft.service.RoleService;
import org.apache.commons.lang.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.UUID;

@Service
public class RoleServiceImpl implements RoleService {

    @Resource
    RoleDao roleDao;

    @Resource
    RoleMenuDao roleMenuDao;


    /*查询所有角色根据ID*/
    @Override
    public List<Role> selectRoleById(String id) {

        return roleDao.selectRoleById(id);
    }

    /*查询所有角色用户*/
    @Override
    public List<Role> selectRoleList(Role role) {
        return roleDao.selectRoleList(role);
    }

    /*根据ID更新角色的数据*/
    @Transactional
    @Override
    public int updateRoleById(Role role) {
        String roleId = Optional.ofNullable(role).map(Role::getId).orElse("");
        /*更新前删除角色和菜单关系表数据*/
        deleteRoleMenu(roleId);
        /*更新角色信息*/
        roleDao.updateRoleById(role);
        /*插入新的角色菜单关系*/
        insertRoleMenu(role.getId(),role.getMenuIds());
        return 1;
    }

    @Override
    public int deleteRoleById(String id) {
        return roleDao.deleteRoleById(id);
    }

    /*新增角色*/
    @Transactional
    @Override
    public int insertRole(Role role) {

        /*判断是新增的用户且 不是空数据的*/
        if (StringUtils.isNotEmpty(role.getRoleName()) ){
            /*设置随机UUID*/
            role.setId(UUID.randomUUID().toString().replace("-",""));
            /*插入用户角色关联表*/
            insertRoleMenu(role.getId(),role.getMenuIds());
            /*调用Dao数据*/
            return roleDao.insertRole(role);
        }

        return 2;

    }/**/

    /*新增角色和菜单的关系*/
    public void insertRoleMenu(String roleId, String[] menuIds){

        /*初始化一个存储菜单ID的集合*/
        ArrayList<RoleMenu> list = new ArrayList<>(menuIds.length);

        /*循环创建角色菜单关系对象*/
        for (String menuId: menuIds) {
            RoleMenu roleMenu = new RoleMenu(roleId, menuId);
            list.add(roleMenu);
        }
        /*调用Dao层*/
        roleMenuDao.insertRoleMenu(list);
    }

    /*删除角色和菜单的关系根据角色的ID*/
    public void deleteRoleMenu(String roleId) {
         roleMenuDao.deleteRoleMenu(roleId);

    }


}
